﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SOAPServices.Models;

namespace SOAPServices.Controllers
{
    public class ClienteController : Controller
    {
        private List<Cliente> CrearCliente() 
        {
            TipoEmpresa Tempresa1 = new TipoEmpresa() {Codigo=1,Descripcion="SOCIEDAD ANONIMA CERRADA",Abreviacion="SAC"};
            TipoEmpresa Tempresa2 = new TipoEmpresa() { Codigo = 2, Descripcion = "SOCIEDAD CON RESPONSABILIDAD LIMITADA", Abreviacion = "SRL" };
            TipoEmpresa Tempresa3 = new TipoEmpresa() { Codigo = 3, Descripcion = "SOCIEDAD COLECTIVA", Abreviacion = "SC" };


            List<Cliente> clientes = new List<Cliente>();

            //Cliente Empresa1 = new Cliente() {cntEmpleados=3,Codigo=1,fecIniOperaciones=new DateTime(2012,2,15) ,nroRUC="23546789",razSocial="WKM CONSTRUCTORES",tipEmpresa="SAA"};
            clientes.Add(new Cliente() { CntEmpleados = 3, Codigo = 1, FecIniOperaciones = new DateTime(2012, 2, 23), NroRUC = "23546789123", RazSocial = "WKM CONSTRUCTORES", TipEmpresa = Tempresa1 });
            clientes.Add(new Cliente() { CntEmpleados = 2, Codigo = 2, FecIniOperaciones = new DateTime(2010, 4, 11), NroRUC = "34567827455", RazSocial = "CONTRATISTAS JL", TipEmpresa = Tempresa2 });
            clientes.Add(new Cliente() { CntEmpleados = 4, Codigo = 3, FecIniOperaciones = new DateTime(2011, 1, 22), NroRUC = "43267891760", RazSocial = "ESTRELLITA PRODUCCIONES", TipEmpresa = Tempresa3 });
            clientes.Add(new Cliente() { CntEmpleados = 1, Codigo = 4, FecIniOperaciones = new DateTime(2009, 8, 18), NroRUC = "12567397834", RazSocial = "RADIO LA VOZ", TipEmpresa = Tempresa1 });
            return clientes;
        }
        private Cliente ObtenerCliente(int codigo) 
        {
            List<Cliente> clientes = (List<Cliente>)Session["clientes"];
            Cliente model = clientes.Single(delegate(Cliente cliente)
            {
                //busca un asesor en una lista de asesores
                if (cliente.Codigo == codigo) return true;
                else return false;

            });
            return model;


        }

        //
        // GET: /Cliente/

        //muestra pagina con listado de clientes
        public ActionResult Index()
        {
            if (Session["clientes"] == null)
                Session["clientes"] = CrearCliente();
            List<Cliente> model = (List<Cliente>)Session["clientes"];
            return View(model);
        }

        //
        // GET: /Cliente/Details/5
        //muestra pagina con los datos de un cliente
        public ActionResult Details(int id)
        {
            Cliente model = ObtenerCliente(id);

            return View(model);
        }

        //
        // GET: /Cliente/Create
        //muestra pagina para ingresar datos de creacion
        public ActionResult Create()
        {

            return View();
        } 

        //
        // POST: /Cliente/Create
        //recibe los datos del formulario y reliza la creacion
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here
                List<Cliente> clientes=(List<Cliente>)Session["clientes"];
                clientes.Add(new Cliente()

                {
                    //Agrega un objeto a la lista
                    Codigo = int.Parse(collection["Codigo"]),
                    CntEmpleados = int.Parse(collection["CntEmpleados"]),
                    FecIniOperaciones = DateTime.Parse(collection["FecIniOperaciones"]),
                    NroRUC = collection["NroRUC"],
                    RazSocial = collection["RazSocial"],
                    TipEmpresa=new TipoEmpresa()
                    {
                        Codigo = int.Parse(collection["TipEmpresa.Codigo"]),
                        Descripcion = collection["TipEmpresa.Descripcion"],
                        Abreviacion = collection["TipEmpresa.Abreviacion"],

                    }
                });

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /Cliente/Edit/5
       // muestra pagina con datos a editar
        public ActionResult Edit(int id)
        {
            Cliente model = ObtenerCliente(id);
            return View(model);
        }

        //
        // POST: /Cliente/Edit/5
        //recibe datos del formulario y realiza modificacion
        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
                Cliente model = ObtenerCliente(id);
                model.CntEmpleados = int.Parse(collection["CntEmpleados"]);
                model.FecIniOperaciones = DateTime.Parse(collection["FecIniOperaciones"]);
                model.NroRUC = collection["NroRUC"];
                model.RazSocial = collection["RazSocial"];
                //model.tipEmpresa = collection["tipEmpresa"]; 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Cliente/Delete/5
        //muestra pagina para confirmar eliminacion
        public ActionResult Delete(int id)
        {
            Cliente model = ObtenerCliente(id);
            return View(model);
        }

        //
        // POST: /Cliente/Delete/5
        //realiza eliminacion
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
                List<Cliente> clientes = (List<Cliente>)Session["clientes"];
                clientes.Remove(ObtenerCliente(id));

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
